package com.tedu._04mybatis.mapper;

import com.tedu._04mybatis.pojo.Weibo;
import com.tedu._04mybatis.pojo.WeiboVO1;
import com.tedu._04mybatis.pojo.WeiboVO2;
import com.tedu._04mybatis.pojo.WeiboVO3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
   // @Insert("INSERT INTO weibo(content,created,user_id) " +
   //       "VALUES(#{content},#{created},#{userId})")
    int insert(Weibo weibo);

    /*
        DELETE FROM weibo WHERE id=?
        这里的"?"就是方法参数的"id"
     */

   // @Delete("DELETE FROM weibo WHERE id=#{id}")
    int deleteById(Integer id);

    /*
        UPDATE weibo
        SET content=?,created=?,user_id=?
        WHERE id=?
     */
    // @Update("UPDATE weibo " +
    //        "SET content=#{content},created=#{created},user_id=#{userId} " +
    //      "WHERE id=#{id}")
    int updateById(Weibo weibo);

     /*
        根据id查询一篇微博信息
        SELECT id,content,created,user_id
        FROM weibo
        WHERE id=?

        JDBC代码示意:
        PreparedStatement ps = connection.preparedStatement(sql);
        ps.setInt(1);//为id赋值
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            Weibo weibo = new Weibo();
            weibo.setId(rs.getInt("id"));
            weibo.setContent(rs.getString("content"));
            ... 逐一将字段设置到对应属性上
            return weibo;
        }

        使用Mybatis后
        @Select("SELECT id,content,created,user_id
                 FROM weibo
                 WHERE id=#{id}")
        Mybatis通过当前方法的返回值类型分析出查询结果应当用一个Weibo对象表示
        然后在进行上述SELECT语句的执行后将结果集中的每个字段设置到Weibo对象的对应属性上
        而对应的原则是:结果集的字段名应当与Weibo的属性名一致就会自动设置
        对于字段名与属性名不一致的情况时，可以为字段取别名，让别名与属性名一致即可
        例如
          weibo表中的user_id字段就和Weibo对象上的userId属性名不一致
          此时:
          SELECT id,content,created,user_id userId
                                            ^^^^^^
                                        别名与属性名一致即可
     */
    //@Select("SELECT id,content,created,user_id userId " +
      //      "FROM weibo " +
        //    "WHERE id = #{id}")
    Weibo selectById(Integer id);

    //  @Select("SELECT id,content,created,user_id userId " +
    //        "FROM weibo")
    List<Weibo> selectAll();

    /*
    查看部分字段
    根据ID查看指定微博的内容和创建时间(其余字段不看)
     */
   //  @Select("SELECT content,created " +
    //        "FROM weibo " +
      //      "WHERE id = #{id}")
    WeiboVO1 SelectWeiboVO1ById(Integer id);

    /*
    SELECT content,user_id;
    FROM weibo
     */

   // @Select("SELECT content,user_id userId " +
    //        "FROM weibo")
    List<WeiboVO2> selectAllWeiboVO2();


    int dynamicUpdate(Weibo weibo);

    int dynamicDeleteByIds(Integer[] ids);

    int dynamicDeleteByIds2(List<Integer> ids);

    WeiboVO3 selectWeiboVO3ById(Integer id);

    int countWeibo();





}
